/**
 * Siri 系统运行环境
 */
window.Env = {};
// 页面组件
window.Env.page = {
    canvas: 0,
    box: 0,
    context: 0
};
// 锁容器
window.Env.lock = {
    selector: true,  // 单项选择锁，保证选择流程只有一个被执行
    motiSection: {}  // 多项选择锁，保证当前的选项不被重复执行
}
// 静态物品
window.Env.stat = {
    wall: {},
    floor: {},
    build: {},
    truck: {},
    box: {},
    robot: {},
    missile: {},  // 导弹
    bullet: {}  // 子弹
};
// 角色
window.Env.staff = {
    lead: {},
    robot: {},
    boos: {},
    npc: {},
    soldier: {}
};

// 显性动作
window.Env.action = {
    boom: {},
    reload: {},  // 上膛
    throw: {},  // 抛出弧线
    jump: {},  // 跳
};

// 游戏状态
window.Env.status = {
    checkPoint: 0,  // 当前关卡
    // 游戏流程监听器
    evt: {
        pass: 0,  // 过关
        gameover: 0  // 游戏结束
    }
};

// 环境兼容性修补和监测
(function(document) {
    function checkEnv(objName) {
        if (typeof(window[objName]) == "undefined" || null) {
            console.log("Check "+ objName +" [NO]");
        } else {
            console.log("Check "+ objName +" [YES]");
        }
    }
    console.log("Environmental Initialization...");
    // 动画执行器兼容
    window.cancelAnimationFrame = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame;
    window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
    checkEnv("requestAnimationFrame");
    checkEnv("cancelAnimationFrame");
    checkEnv("Storage");
    checkEnv("Audio");
})(document);

// 全局化应用
(function(document) {
    // 获取 dom 对象
    window.ge = function(dom) {return document.querySelector(dom);};
    // 单点音效生成器
    window.audioFactory = function(path) {
        var audio = document.createElement("audio");
        audio.src = path;
        audio.loop = false;
        audio.autostart = false;
        return audio;
    };
    // 按键监听器
    window.keyListener = function(e) {
        return navigator.appName == "Microsoft Internet Explorer" ? event.keyCode : e.which;
    };
    // 清空画布
    window.clearBox = function() {
        Env.page.context.clearRect(0, 0, Config.interface.width, Config.interface.height);
    }
    // 关卡【通过】监听器(此处设置的事件应该在游戏流程内出发)
    Env.status.evt.pass = document.createEvent('HTMLEvents');
    Env.status.evt.pass.initEvent('gamepass', false, false);  // 注册游戏过关事件
    // 游戏结束监听器
    Env.status.evt.gameover = document.createEvent('HTMLEvents');
    Env.status.evt.gameover.initEvent('gameover', false, false);  // 注册游戏结束事件
    // 公共事件触发器
    window.trigger = function(evt) {
        console.log(Env.status.evt[evt]);
        document.dispatchEvent(Env.status.evt[evt]);
    };

})(document);
